/**
 * Definition for singly-linked list.
 * class ListNode {
 *     val: number
 *     next: ListNode | null
 *     constructor(val?: number, next?: ListNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.next = (next===undefined ? null : next)
 *     }
 * }
 */

 function swapPairs(head: ListNode | null): ListNode | null {
  if (!head || !head.next) {
        // 当前节点为 null 或者下一节点为 null 时，不需要做交换
        return head
      }

      let fri = head // 保留当前节点
      let sec = fri.next // 保留当前节点的下一节点
      let thi = sec.next // 保留当前节点的下一节点的下一节点
      sec.next = fri // 将前面俩个节点交换
      fri.next = swapPairs(thi) // 将 thi 节点做为头节点继续递归获取该连上来的节点
      return sec
};